cc.Class({
    extends: cc.Component,

    properties: {
        // 英雄
        hero: cc.Node,
        // 跳起来的音乐
        jumpMusic: {
            default: null,
            url: cc.AudioClip
        },

        // 得分标签
        scoreLab: cc.Label,

        // 时间标签
        timeLab: cc.Label,
        timeNo: 10,

        // 地刺相关 -----------
        dici: cc.Prefab,    // 地刺

        // 结束音乐
        dieAudio: {
            default: null,
            url: cc.AudioClip,
        }
    },

    onLoad: function () {
        // 初始化英雄的位置
        this.hero.setPosition(-this.node.width / 2 + 80, this.node.height / 2 - 175);

        // 添加点击屏幕的监听事件
        this.onMouseTouchEvent();

        // 当前得分
        currentScore = 0;   // 全局的属性
        this.scoreLab.string = currentScore;

        // 时间倒计时
        this.timeLab.string = "倒计时：" + this.timeNo + "s";
        this.schedule(function() {
            this.timeNo --;
            this.timeLab.string = "倒计时：" + this.timeNo + "s";
            if (this.timeNo <= 0) {
                cc.audioEngine.pauseMusic();
                cc.director.loadScene('GameOver');
            }
        }, 1);

        // 当前生成的地刺的序号，用来排版地刺的位置的
        this.diciCount = 0;
        for (var i = 0; i < 8; i++) {
            this.createDici();
        }
    },

    // 
    onCollisionForHeroAndDici: function () {
        // 碰到地刺后，分数-1，因为下方每次点击屏幕都加1了，在碰到地刺的这一次，也加上了1，所以最终得分是要减1
        this.scoreConfig(false);

        // 播放死亡声音
        cc.audioEngine.playEffect(this.dieAudio, false);

        cc.director.loadScene('GameOver');
    },

    /** 监听鼠标点击
     * 如果猪脚当前在屏幕右边，点击屏幕左边，猪脚跳到左边，如果猪脚当前在屏幕左边，猪脚跳起来一下
     * 如果猪脚当前在屏幕左边，点击屏幕右边，猪脚跳到右边，如果猪脚当前在屏幕右边，猪脚跳起来一下
    */
    onMouseTouchEvent: function () {
        var self = this;
        // 鼠标点击事件回调
        var touchManager = {
            event: cc.EventListener.TOUCH_ONE_BY_ONE,
            onTouchBegan: function (touches, event) {
                // 猪脚跳起来的音乐
                cc.audioEngine.playEffect(self.jumpMusic, false);

                // 获取当前时间绑定的target
                var target = event.getCurrentTarget();
                // 获取到点击的事件在当前节点上的坐标
                var locationInNode = target.convertToNodeSpace(touches.getLocation());
                console.log("locationInNode.x == " + locationInNode.x + "，self.node.width / 2 == " + self.node.width / 2);
                if (locationInNode.x > self.node.width / 2) { // 点击屏幕的右边
                    self.touchRightInNode();
                } else {    // 点击屏幕的左边
                    self.touchLeftInNode();
                }

                // 分数+1
                self.scoreConfig(true);

                self.createDici();
            },

            onTouchMoved: function (touches, event) { },
            onTouchEnded: function (touches, event) { },
            onTouchCancelled: function (touches, event) { },
        }
        // 将点击时间监听者添加到本类节点对象上
        cc.eventManager.addListener(touchManager, self.node);
    },

    scoreConfig: function (isAdd) {
        currentScore = isAdd ? currentScore + 1 : currentScore - 1;
        this.scoreLab.string = currentScore;
    },

    // 点击屏幕右边
    touchRightInNode: function () {

        // 如果当前猪脚在左边时候 =>> 用当前猪脚的Rotation来判断，为0时，在左边，为180时，猪脚站立方向相反，在右边
        if (this.hero.rotationY == 180) {
            // 原本就在右边时候，直接跳起来一下
            var jumpAmin1 = cc.moveTo(0.1, cc.p(this.node.width / 2 - 80 - 30, this.hero.getPositionY()));
            var jumpAmin2 = cc.moveTo(0.1, cc.p(this.node.width / 2 - 80, this.hero.getPositionY()));
            // 执行动画
            this.hero.runAction(cc.sequence(jumpAmin1, jumpAmin2));
        } else {
            // 左往右的动画
            var toRightAmin = cc.moveTo(0.2, cc.p(this.node.width / 2 - 80, this.hero.getPositionY()));
            this.hero.runAction(toRightAmin);
        }
        this.hero.rotationY = 180;
    },
    // 点击屏幕左边
    touchLeftInNode: function () {
        // 如果当前猪脚在右边时候 =>> 用当前猪脚的Rotation来判断，为0时，在左边，为180时，猪脚站立方向相反，在右边
        if (this.hero.rotationY == 0) {
            var jumpAmin1 = cc.moveTo(0.1, cc.p(-this.node.width / 2 + 80 + 30, this.hero.getPositionY()));
            var jumpAmin2 = cc.moveTo(0.1, cc.p(-this.node.width / 2 + 80, this.hero.getPositionY()));
            this.hero.runAction(cc.sequence(jumpAmin1, jumpAmin2));
        } else {
            var toLeftAmin = cc.moveTo(0.2, cc.p(- this.node.width / 2 + 80, this.hero.getPositionY()));
            this.hero.runAction(toLeftAmin);
        }
        this.hero.rotationY = 0;
    },

    // 创建地刺
    createDici: function () {
        this.diciCount += 1;
        // 从预计资源中，拿到地刺
        var dici = cc.instantiate(this.dici);
        this.node.addChild(dici);

        // 通过随机数来决定地刺是否在左边还是在右边
        dici.rotationY = ((cc.random0To1() >= 0.5) ? 0 : 180);

        // 设置地刺的坐标
        var randX = dici.rotationY == 0 ? (this.node.width / 2 - 80) : (-this.node.width / 2 + 80);

        var randY = 0;
        if (this.diciCount + 1 > 8) {
            randY = this.node.height / 2 - diciIntevalY * 8 - diciIntevalY;
        } else {
            randY = this.node.height / 2 - this.diciCount * diciIntevalY - diciIntevalY;
        }
        dici.setPosition(cc.p(randX, randY));
    },

    // update: function (dt) {

    // },
});
